package 代码记录.指定公司代码练习记录.面试手撕2024.幂律科技;

import java.util.*;

public class Test {
    // 现在数据库有一张表，用来存储一个多叉树，id为主键，pid 表示父节点的 id，已知 "-1" 表示根节点，
    // 现在要求打印出从根节点到每个子节点的路径（可以是无序的）。
    //
    // | id      | pid    |
    // |---------|--------|
    // | "A"     | "-1"   |
    // | "A-1"   | "A"    |
    // | "A-2"   | "A"    |
    // | "A-3"   | "A"    |
    // | "A-2-1" | "A-2"  |
    // | "A-2-2" | "A-2"  |
    // | "A-2-3" | "A-2"  |
    //
    // Input: [
    //   {
    //       "id": "A",
    //       "pid": "-1"
    //   },
    //   {
    //       "id": "A-1",
    //       "pid": "A"
    //   },
    //   {
    //       "id": "A-2",
    //       "pid": "A"
    //   },
    //   {
    //       "id": "A-3",
    //       "pid": "A"
    //   },
    //   {
    //       "id": "A-2-1",
    //       "pid": "A-2"
    //   },
    //   {
    //       "id": "A-2-2",
    //       "pid": "A-2"
    //   },
    //   {
    //       "id": "A-2-3",
    //       "pid": "A-2"
    //   }
    // ]
    // Output: [
    //   "/A",
    //   "/A/A-1",
    //   "/A/A-2",
    //   "/A/A-3",
    //   "/A/A-2/A-2-1",
    //   "/A/A-2/A-2-2",
    //   "/A/A-2/A-2-3",
    // ]

    /**
     * 这道题确实有点难，自己做不出来；下面是自己的思路
     * 用chatGPT做出来这道题了，在Test2中
     */
    static List<String> paths = new ArrayList<>();
    public static void main(String[] args) {
        List<Node> nodes = new ArrayList<>();
        nodes.add(new Node("A", "-1"));
        // nodes.add(new Node("B", "-1"));
        nodes.add(new Node("A-1", "A"));
        nodes.add(new Node("A-2", "A"));
        nodes.add(new Node("A-3", "A"));
        nodes.add(new Node("A-2-1", "A-2"));
        nodes.add(new Node("A-2-2", "A-2"));
        nodes.add(new Node("A-2-3", "A-2"));
        nodes.add(new Node("A-2-4", "A-2"));
        Node root = builderTree(new Node("A", "-1"), nodes);
        allPaths(root);
    }
    //根据传入的root根节点和所有节点的属性，构建N叉树
    private static Node builderTree(Node root, List<Node> nodes){
        return null;
    }
    //遍历N叉树的每一个根节点到叶子节点的路径
    private static List<String> allPaths(Node root){
        return paths;
    }

    static class Node {
        Node(String ID, String PID) {
            this.ID = ID;
            this.PID = PID;
        }
        public String ID; // 节点ID
        public String PID; // 父节点ID
    }
}
